package com.goodwill.androidtest.kotlin_test

//fun main() {
//    println("Hello World!")
//    testList();
//    testVariable();
//    testPari();
//    testFor();
//    var char = {'1', '100'}
//}

//fun testVariable() {
//    var a = 5..100          // [0,100]
//    var b = 0 until 100     // [0,100)，不包括100
//    var c = 0 downTo 100    // 倒序
//    var d = c.reversed()    // 创建一个基于原来倒序的区间
//    var e = 'a'..'z'        // 也适用于字母

//    println("a first: ${a.first}")
//    println("a last: ${a.last}")
//
//    for ((i, e) in a.withIndex()) {
//        println("${i}: ${e}")
//    }
//    println("a: ${a}")
//    println("b: ${b}")
//    println("c: ${c}")
//    println("d: ${d}")
//    println("e: ${e}")

//    println("--------------------------------")

    /**
     * 判断元素是否存在
     * 判断是否存在于区间内也是使用contains方法或使用关键字in。如：
     */
//    var result1: Boolean = 1 in a
//    var result2: Boolean = 'A' !in e
//    var result3: Boolean = e.contains('a')

//    println("--------------------------------")

//}

//fun testList() {
//    var array1 = listOf<Int>(1, 2, 3, 4, 5)
//    for (i in array1) {
//        println("num:${i}")
//    }
//
//    println("--------------------")
//    /**
//     * 示例2：循环中使用indices关键字
//     * 数组循环中使用indice属性可以像Java中的for的i++用法
//     */
//    for (i in array1.indices) {
//        println("num:${i}")
//    }
//
//    println("--------------------")
//    /**
//     * 示例3：循环中使用withIndex关键字
//     * 数组循环中使用withIndex属性可以同时输出下标和值
//     */
//    for ((i, e) in array1.withIndex()) {
//        println("${i}, ${e}")
//    }
//}

/**
 * Pari键值对
 * 上面在Map的创建中传入的就是pari对象，它通过to关键字连接key和value值。使用如：
 */
//fun testPari() {
//    val pair1 = 1 to "一"           // 创建
//    var pair2 = Pair(2, "二")       // 不同的创建方式
//    val first = pair1.first         // 获得第一个元素
//    val second = pair1.second       // 获得第二个元素
//    val (x, y) = pair1               // 解构

    /**
     * Triple 三个元素版本的Pair
     * 应用场景：有时候一个函数需要返回多个参数，那完全可以使用Pari或Triple来实现
     */
//    val triple = Triple(1, "一", "壹")
//    val first = triple.first
//    val second = triple.second
//    val third = triple.third
//    val (x, y, z) = triple
//}

//fun testFor() {
//    /**
//     * 示例2：跳了多层循环
//     * 在循环处声明一个名称用@连接，在break处指定跳出位置。如：
//     */
//    var array1: Array<Char> = arrayOf('H', 'e', 'l', 'l', 'o')
//    var array2: Array<Char> = arrayOf('W', 'o', 'r', 'l', 'd')
//
//    Outter@ for (i in array1) {
//        println("i: ${i}")
//        Inner1@ for (j in array2) {
//            println("j: ${j}")
//            if ('r'.equals(j)) {
//                break@Outter
//            }
//        }
//    }
//}
